/**
 * UUID（v4）生成器
 * @returns {String} 输出UUID
 */
export const uuid4 = (): string => "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, ($): string => {
    const r: number = Math.trunc(Math.random() * 16)
    return ($ == "x" ? r : (r & 0x3 | 0x8)).toString(16)
})

/**
 * UUID（v7）生成器
 * @returns {String} 输出UUID
 */
export default (): string => {
    const UT = Date.now().toString(16).padStart(12, "0") // 时间戳（Unix Timestamp）
    return [
        UT.slice(0, 8), // 时间戳高8位
        UT.slice(8), // 时间戳低4位
        "7" + uuid4().slice(15) // 拼接版本号和后续随机数
    ].join("-")
}
